function reW = reviseHyperW(W, Z, alpha)

cp_num = 30;

n = size(W,1);
gd = full(sum(W,2));
d_mhalf = spdiags(gd.^-.5,0,n,n);
L = d_mhalf*W*d_mhalf;


Fv = 2*rand(size(W))-1;
Fh = 2*rand(size(W))-1;

for i=1:cp_num
    Fv = alpha*L*Fv + (1-alpha)*Z;  
end

for i=1:cp_num
    Fh = alpha*Fh*L + (1-alpha)*Fv;  
end

F = Fh;

idx = (F>=0);
diagW = diag(W);
W_ii = repmat(diagW,1,n);

reW = ((W_ii-(1-F).*(W_ii-W)) .* idx) +  (((1+F).*W) .* (~idx));


end

